// sgu330
// 题意：
// 给定一个数A(<=10^12)，每次可以任意选择一个A的因子d，且1<d<A，然后
// 变换成A+d，问是否可以存在一系列变化从数A变到数B。如果不存在输出
// "Impossible", 如果存在，题目保证肯定存在变化次数小于等于500次的变化
// 序列，随便输出一种。
//
// 题解：
// 首先偶数到偶数很简单，只要一直加2就好，但是这样可能会超过500次，但是也是
// 有办法解决。然后如果有一个数是奇数，比如A那么我们可以设法加上最小的因子，
// 这样它就成为偶数了。如果是B，我们也可以减去一个最小的因子，这样是没问题的，
// 因为假如说d是B最小的因子，那么肯定也是B-d的因子，所以只要能到B-d，
// 肯定也就能到B。
//
// 现在怎么从一个偶数尽量少的步数到另一个偶数。
// 比如x，我们可以不断加上lowbit(x)，当然如果lowbit(x)不符合，我们可以
// 把它不断除以2直到满足为止。
//
// ml:run = $bin < input
#include <iostream>
#include <vector>

using ll = long long;
ll a, b;

void fail() { std::cout << "Impossible\n"; exit(0); }
ll lowbit(ll x) { return x & -x; }

std::vector<ll> ans;

int main()
{
    std::ios_base::sync_with_stdio(false);
    std::cin >> a >> b;
    auto ta = a;
    auto tb = b;
    ll i = 2;
    for (; i * i <= a && (a % i); i++);
    if (i * i > a) fail();
    if (a & 1) a += i;

    i = 2;
    for (; i * i <= b && (b % i); i++);
    if (i * i > b) fail();
    if (b & 1) b -= i;

    if (a > b) fail();

    while (a != b) {
        ans.push_back(a);
        ll d = lowbit(a);
        if (d == a) d /= 2;
        while (a + d > b) d /= 2;
        a += d;
    }
    ans.push_back(b);
    if (b != tb) ans.push_back(tb);
    if (ans[0] != ta) std::cout << ta << "\n";
    for (auto i : ans) std::cout << i << "\n";
}

